package A2016;
/*
 * 现在小学的数学题目也不是那么好玩的。
看看这个寒假作业：

   □ + □ = □
   □ - □ = □
   □ × □ = □
   □ ÷ □ = □
   (如果显示不出来，可以参见【图1.jpg】)
   
每个方块代表1~13中的某一个数字，但不能重复。
比如：
 6  + 7 = 13
 9  - 8 = 1
 3  * 4 = 12
 10 / 2 = 5

以及： 
 7  + 6 = 13
 9  - 8 = 1
 3  * 4 = 12
 10 / 2 = 5

就算两种解法。（加法，乘法交换律后算不同的方案）

你一共找到了多少种方案？
64  ，解题需要剪枝
 */
public class _6_寒假作业 {
	static int[] a= {1,2,3,4,5,6,7,8,9,10,11,12,13};
	private static int ans;
	public static void main(String[] args) {
		f(0);
		System.out.println(ans);
	}

	private static void f(int n) {
		if(n>=12) {	
			if(a[0]+a[1]==a[2]&&a[3]-a[4]==a[5]&&a[6]*a[7]==a[8]&&a[10]*a[11]==a[9]){
				ans++;
			}			
			return;
		}
		if(a[0]+a[1]!=a[2]&&n>=5) {
			return;
		}
		if(a[3]-a[4]!=a[5]&&n>=6) {
			return;
		}
		if(a[6]*a[7]!=a[8]&&n>=9) {
			return;
		}
		if(a[10]*a[11]!=a[9]&&n>=12) {
			return;
		}
		for(int i=n;i<13;i++) {
			swap(i,n);
			f(n+1);
			swap(i,n);
		}
		
		
	}

	private static void swap(int i, int n) {
		int t=a[i];
		a[i]=a[n];
		a[n]=t;		
	}

}
